#pragma once

#include <jni.h>

namespace gtl
{

namespace jni
{

class jstr
{
public:
	jstr(JNIEnv* env, bool del = false)
	{
		m_env = env;
		m_str = NULL;
		m_delete = del;
		m_jstr = NULL;
	}

	jstr(JNIEnv* env, const char* str, bool del = false)
	{
		m_env = env;
		m_str = str;
		m_delete = del;
		if(m_env == NULL || str == NULL)
			return;

		m_jstr = m_env->NewStringUTF(str);
	}

	~jstr()
	{
		if(!m_delete || m_env == NULL || m_jstr == NULL)
			return;

		m_env->ReleaseStringUTFChars(m_jstr, m_str);
	}

public:
	void operator=(const char* str)
	{
		if(m_env == NULL || str == NULL)
			return;

		m_str = str;
		m_jstr = m_env->NewStringUTF(str);
	}

	jstring str()
	{
		return m_jstr;
	}

	jstring value()
	{
		return m_jstr;
	}

	operator jstring()
	{
		return m_jstr;
	}

protected:
	bool m_delete;
	JNIEnv* m_env;
	jstring	m_jstr;
	const char* m_str;
};

} // end of namespace jni

} // end of namespace gtl
